/**
 * 测试 TypeORM 数据库连接
 * 模拟 NestJS 应用启动时的数据库连接
 */

const typeorm = require('typeorm');
require('dotenv').config();

async function testTypeOrmConnection() {
  console.log('==========================================');
  console.log('🔍 TypeORM 数据库连接测试');
  console.log('==========================================\n');

  const config = {
    type: 'mysql',
    host: process.env.DB_HOST || 'localhost',
    port: parseInt(process.env.DB_PORT) || 3306,
    username: process.env.DB_USERNAME || 'root',
    password: process.env.DB_PASSWORD || 'password',
    database: process.env.DB_DATABASE || 'text_tags_db',
    synchronize: false,
    logging: true,
    connectTimeout: 10000,
  };

  console.log('📋 连接配置:');
  console.log(`   类型: ${config.type}`);
  console.log(`   主机: ${config.host}:${config.port}`);
  console.log(`   用户: ${config.username}`);
  console.log(`   密码: ${config.password ? '***' + config.password.slice(-3) : '未设置'}`);
  console.log(`   数据库: ${config.database}`);
  console.log('');

  let dataSource;

  try {
    console.log('🔄 尝试初始化 TypeORM DataSource...');
    dataSource = new typeorm.DataSource(config);
    
    console.log('🔄 尝试连接数据库...');
    await dataSource.initialize();
    
    console.log('✅ TypeORM 连接成功！');
    console.log('');
    
    // 测试查询
    console.log('🔄 执行测试查询...');
    const result = await dataSource.query('SELECT VERSION() as version, DATABASE() as db');
    console.log('✅ 查询结果:');
    console.log(`   MySQL 版本: ${result[0].version}`);
    console.log(`   当前数据库: ${result[0].db}`);
    console.log('');
    
    console.log('==========================================');
    console.log('🎉 TypeORM 连接测试成功！');
    console.log('==========================================');
    
    return true;

  } catch (error) {
    console.error('');
    console.error('==========================================');
    console.error('❌ TypeORM 连接测试失败');
    console.error('==========================================');
    console.error('');
    console.error('错误详情:');
    console.error(`   错误名称: ${error.name}`);
    console.error(`   错误代码: ${error.code || 'N/A'}`);
    console.error(`   错误消息: ${error.message}`);
    console.error('');

    if (error.code === 'ER_ACCESS_DENIED_ERROR') {
      console.error('🔧 这就是导致 NestJS 应用无法启动的原因！');
      console.error('');
      console.error('解决方案:');
      console.error('   1. 修复数据库权限问题');
      console.error('      联系数据库管理员授予当前 IP 访问权限');
      console.error('');
      console.error('   2. 或者临时禁用数据库模块');
      console.error('      在 app.module.ts 中注释掉 DatabaseModule');
      console.error('');
    } else if (error.code === 'ECONNREFUSED') {
      console.error('🔧 数据库服务器拒绝连接');
      console.error('   → 检查数据库服务是否启动');
      console.error('   → 检查主机地址和端口');
      console.error('');
    }

    return false;

  } finally {
    if (dataSource && dataSource.isInitialized) {
      await dataSource.destroy();
      console.log('🔌 TypeORM 连接已关闭\n');
    }
  }
}

// 执行测试
testTypeOrmConnection().then(success => {
  process.exit(success ? 0 : 1);
}).catch(error => {
  console.error('未捕获的错误:', error);
  process.exit(1);
});

